import axios from 'axios'
import './axiosConfig'
import Cookies from 'js-cookie'
import {
  showLoading,
  hideLoading
} from './loding';
import $message from '../plugins/element'
import { getToken } from '@/utils/auth'
// 请求拦截器
axios.interceptors.request.use(

  config => {
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    if (config.url == "http://127.0.0.1:57380/scan") {

    } else if (config.url == "http://127.0.0.1:57380/processed") {

    } else if (config.url == "/trademark/base2text/recogonize") {
      const token = window.sessionStorage.getItem("token");
      token && (config.headers.cnm = token);
    } else {
        // showLoading()
        const token = window.sessionStorage.getItem("token");
        token && (config.headers.cnm = token);
    }
      if(getToken() && getToken()!= undefined){
          config["headers"]['Authorization'] ='Bearer ' + getToken();
      }
    return config;
  },
  error => {
    return Promise.error(error);
  }
);
axios.interceptors.response.use(
  response => {
    // hideLoading();
    // end()
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {

      return Promise.resolve(response);
    } else {

      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  // 下面列举几个常见的操作，其他需求可自行扩展
  error => {
    // hideLoading();
    if (error.response.status) {
      // hideLoading();
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          $message.error("身份验证失败，请关闭重新进入。");
          break;

          // 403 token过期
          // 登录过期对用户进行提示
          // 清除本地token和清空vuex中token对象
          // 跳转登录页面
        case 403:
          $message.error("登录过期，请关闭重新进入。");
          // 清除token
          break;
          // 404请求不存在
        case 404:
          $message.error("网络错误");
          break;
          // 其他错误，直接抛出错误提示
        default:
          $message.error("网络错误");
      }
      return Promise.reject(error.response);
    }
    $message.error("网络错误");
  }
);

export default axios;